package br.uniriotec.pssgbd.gerencia.model.bo;

import java.util.ArrayList;
import java.util.List;

import br.uniriotec.pssgbd.gerencia.model.entidade.Genero;
import br.uniriotec.pssgbd.gerencia.model.entidade.Pais;
import br.uniriotec.pssgbd.gerencia.model.entidade.Rotulo;
import br.uniriotec.pssgbd.gerencia.model.entidade.Temperatura;
import br.uniriotec.pssgbd.gerencia.model.entidade.Tipo;

public class RotuloBO extends BaseBO<Rotulo>{
	private static RotuloBO instancia;
	private static List<Rotulo> listaRotulo = null;

	public static RotuloBO getInstance(){
		if(instancia == null){
			instancia = new RotuloBO();
			listaRotulo = new ArrayList<Rotulo>();
		}
		return instancia;
	}

	public void incluir(Rotulo rotulo) throws Exception {
		rotulo.setId(listaRotulo.size());
		listaRotulo.add(rotulo);
	}

	public List<Temperatura> listarTemperaturas() throws Exception{
		List<Temperatura> listaTemp = new ArrayList<Temperatura>();
		Temperatura temp = null;

		temp = new Temperatura();
		temp.setCodTemp(1);
		temp.setTempMin(0.0);
		temp.setTempMax(4.0);
		listaTemp.add(temp);

		temp = new Temperatura();
		temp.setCodTemp(2);
		temp.setTempMin(5.0);
		temp.setTempMax(9.0);
		listaTemp.add(temp);

		temp = new Temperatura();
		temp.setCodTemp(3);
		temp.setTempMin(10.0);
		temp.setTempMax(14.0);
		listaTemp.add(temp);

		temp = new Temperatura();
		temp.setCodTemp(4);
		temp.setTempMin(15.0);
		temp.setTempMax(20.0);
		listaTemp.add(temp);

		return listaTemp;
	}

	public List<Pais> listarPaises() throws Exception{
		return PaisBO.getInstance().listarPaises(); 
	}

	public List<Tipo> listarTipos() throws Exception{
		List<Tipo> listaTipo = new ArrayList<Tipo>();
		Tipo tipo = null;

		tipo = new Tipo();
		tipo.setCodTipo(1);
		tipo.setNome("Larger");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(2);
		tipo.setNome("Ale");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(3);
		tipo.setNome("Pale Ale");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(4);
		tipo.setNome("Strong Ale");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(5);
		tipo.setNome("Stout");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(6);
		tipo.setNome("de Trigo");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(7);
		tipo.setNome("Lambie");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(8);
		tipo.setNome("Fruit Beer");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(9);
		tipo.setNome("Witbier");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(10);
		tipo.setNome("com Especiarias");
		listaTipo.add(tipo);

		tipo = new Tipo();
		tipo.setCodTipo(11);
		tipo.setNome("Outros");
		listaTipo.add(tipo);

		return listaTipo;
	}


	public List <Rotulo> consultar(String nome, String marca, 
			String codTipo, String codTemp) throws Exception 
			{

		List<Rotulo> resultado = new ArrayList<Rotulo>();


		for(Rotulo rotulo : listaRotulo)
		{
			if(nome.equalsIgnoreCase("") == false)
			{
				if((rotulo.getNome().equalsIgnoreCase(nome)) == false)
				{
					continue;
				}
			}
			if(marca.equalsIgnoreCase("") == false)
			{
				if((rotulo.getMarca().equalsIgnoreCase(marca)) == false)
				{
					continue;
				}
			}
			if (Integer.parseInt(codTipo) != -1)
			{
				if((rotulo.getTipo().getCodTipo())!= Integer.parseInt(codTipo))
				{
					continue;
				}
			}
			if (Integer.parseInt(codTemp) != -1)
			{
				if((rotulo.getTemp().getCodTemp()!= Integer.parseInt(codTemp)))
				{		
					continue;
				}
			}

			resultado.add(rotulo);
		}
		return resultado;
			}

	@Override
	public void alterar(Rotulo rotulo) throws Exception {
		listaRotulo.remove(rotulo.getId());
		listaRotulo.add(rotulo);
	}

	public static Rotulo recuperaRotulo(int id){
		return listaRotulo.get(id);
	}

	@Override
	public void excluir(Rotulo rotulo) throws Exception {
		listaRotulo.remove(rotulo);
		for(int i=0;i<listaRotulo.size();i++)
		{	
			if(i!=listaRotulo.get(i).getId())
				listaRotulo.get(i).setId(i);
		}

	}

	@Override
	public List<Rotulo> listar() throws Exception 
	{				
		return listaRotulo;
	}

	public void mockIncluirRotulo() throws Exception{
		Rotulo rotulo = new Rotulo("Teste", "Marca de Teste", Genero.Cerveja, listarTipos().get(0), 
				listarTemperaturas().get(0), 4, listarPaises().get(3));
		listaRotulo.add(rotulo);
	}

}


